**SQL Server中identity(自增)的用法** # 目录 [**SQL Server中identity(自增)的用法** 1](#_Toc8737614) [**零、码仙励志** 1](#_Toc8737615) [**一、identity的基本用法** 1](#t0) [**1.含义** 1](#t2) [**2.语法** 1](#t3) [**3.实例演示** 1](#t4) [**4.删除一条记录接着插入** 3](#t5) [**二、重新设置identity的值** 3](#t6) [**1.语法** 3](#t7) [**2.实例演示** 4](#t8) [**三、向identity字段插入数据** 4](#t9) [**1.语法** 4](#t10) [**2.实例演示** 5](#t11) ** ** **一、identity的基本用法** **1.含义**  identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错 **2.语法** 列名  数据类型  约束  identity(m,n) m表示的是初始值,n表示的是每次自动增加的值 如果m和n的值都没有指定,默认为(1,1) 要么同时指定m和n的值,要么m和n都不指定,不能只写其中一个值,不然会出错 **3.实例演示** 不指定m和n的值 1. > create table student1 2. > ( 3. > sid int primary key identity, 4. > sname nchar(8) not null, 5. > ssex nchar(1) 6. > ) 7. > insert into student1(sname,ssex) values ('张三','男'); 8. > insert into student1 values ('李四','女');*--可以省略列名* 9. > insert into student1 values ('王五','女'); ![image](assets/1.jpg) 指定m和n的值 1. > create table student2 2. > ( 3. > sid int primary key identity(20,5), 4. > sname nchar(8) not null, 5. > ssex nchar(1) 6. > ) 7. > insert into student2(sname,ssex) values ('张三','男'); 8. > insert into student2 values ('李四','女');*--可以省略列名* 9. > insert into student2 values ('王五','女'); ![image2](assets/2.jpg) **4.删除一条记录接着插入** 把sid为2的记录删除,继续插入,新插入的记录的sid不是2,而是3 1. > create table student3 2. > ( 3. > sid int primary key identity, 4. > sname nchar(8) not null, 5. > ssex nchar(1) 6. > ) 7. > insert into student3(sname,ssex) values ('张三','男'); 8. > insert into student3 values ('李四','女'); 9. > delete from student3 where sid=2;*--把sid为2的记录删除* 10. > insert into student3 values ('王五','女'); ![](assets/3.jpg) **二、重新设置identity的值** **1.语法** dbcc checkident(表名,reseed,n); n+1表示的是表中identity字段的初始值(n的值可以为0) 也就是说:如果插入的是id为2的记录,则n的值是1 **2.实例演示** 1. > create table student4 2. > ( 3. > sid int primary key identity, 4. > sname nchar(8) not null, 5. > ssex nchar(1) 6. > ) 7. > insert into student4(sname,ssex) values ('张三','男'); 8. > insert into student4 values ('李四','女'); 9. > delete from student4 where sid=2;*--把sid为2的记录删除* 10. > dbcc > checkident('student4',reseed,1);*--把student4表中identity字段的初始值重新设置为1* 11. > insert into student4 values ('王五','女'); ![](assets/4.jpg) **三、向identity字段插入数据** **1.语法** set identity\_insert 表名 on; insert into 表名(列名1,列名2,列名3,列名4) values (数据1,数据2,数据3,数据4); set identity\_insert 表名 off; 注意:插入数据时必须得指定identity修饰的字段的名字 **2.实例演示** 1. > create table student5 2. > ( 3. > sid int primary key identity(20,5), 4. > sname nchar(8) not null, 5. > ssex nchar(1) 6. > ) 7. > insert into student5(sname,ssex) values ('张三','男'); 8. > insert into student5 values ('李四','女'); 9. > insert into student5 values ('王五','女'); 10. > set identity\_insert student5 on; 11. > */\** 12. > *insert into student5 values ('黑六','男');--error* 13. > *insert into student5 values (21,'黑六','男');--error* 14. > *\*/* 15. > insert into student5(sid,sname,ssex) values (21,'黑六','男'); 16. > set identity\_insert student5 off; 17. > */\** 18. > *insert into student5 values (22,'赵七','女');--error* 19. > *insert into student5(sid,sname,ssex) values > (22,'赵七','女');--error* 20. > *\*/* 21. > insert into student5 values ('赵七','女'); ![](assets/5.jpg)